#include <iostream>

using namespace std;

int k;
int x, y;

void dfs(int a, int b, int len, int x, int y)
{
    if (len == 1)
        return;
    len /= 2;
    // 障碍物在左上角
    if (x < a + len && y < b + len)
    {
        // 摆上一号毯子制造障碍物
        cout << a + len << " " << b + len << " " << 1 << endl;
        dfs(a, b, len, x, y);
        dfs(a, b + len, len, a + len - 1, b + len);
        dfs(a + len, b, len, a + len, b + len - 1);
        dfs(a + len, b + len, len, a + len, b + len);
    }
    else if (x >= a + len && y >= b + len) // 障碍物在右下角
    {
        cout << a + len - 1 << " " << b + len - 1 << " " << 4 << endl;
        dfs(a, b, len, a + len - 1, b + len - 1);
        dfs(a, b + len, len, a + len - 1, b + len);
        dfs(a + len, b, len, a + len, b + len - 1);
        dfs(a + len, b + len, len, x, y);
    }
    else if (x >= a + len) // 障碍物在左下角
    {
        cout << a + len - 1 << " " << b + len << " " << 3 << endl;
        dfs(a, b, len, a + len - 1, b + len - 1);
        dfs(a, b + len, len, a + len - 1, b + len);
        dfs(a + len, b, len, x, y);
        dfs(a + len, b + len, len, a + len, b + len);
    }
    else // 障碍物在右上角
    {
        cout << a + len << " " << b + len - 1 << " " << 2 << endl;
        dfs(a, b, len, a + len - 1, b + len - 1);
        dfs(a, b + len, len, x, y);
        dfs(a + len, b, len, a + len, b + len - 1);
        dfs(a + len, b + len, len, a + len, b + len);
    }
}
int main()
{
    cin >> k >> x >> y;
    k = (1 << k);
    dfs(1, 1, k, x, y); //(起始位置 ， 长度 ， 障碍物的位置)
    return 0;
}